#ifndef GRAPH_H
#define GRAPH_H

class arc
{
public:
    int adjvex;     //该弧连接的下一个节点
    arc* nextArc;   //下一条弧
    arc();

};

class vex
{
public:
    double vote;           //票数
    double voteAbility;    //投票能力
    int isSelect;       //是否已被选择
    int isInfected;     //是否已感染
    //int isInfectedBefore;   //上一次感染的状态
    int isSpread;       //是否已传播
    int isImmune;       //是否已免疫
    int degree;         //该节点的度
    arc* nextArc;
    vex();
    int addArc(int v);  //添加弧
};


class graph
{
private:
    vex* vexChart;      //节点
    int vexNum;         //节点数量
    double f;              //平均度的倒数
    int selectNum;      //已选择节点的个数
    double infectRate;  //感染率
    int coreNum;        //节点组数量
public:
    graph();
    int clearVote();        //清空票数
    int getF();             //计算平均读的倒数
    int updateVA(int v);    //更新节点V的投票能力
    int initVex();          //初始化节点
    int addArc(int v1, int v2);     //添加弧(v1,v2)
    int setVex(int vn);     //设置节点数量
    int setInfectRate(double i);    //设置感染率
    int setCoreNum(int n);  //设置节点组数量
    int selectByDegree();   //按度排序
    int selectByVote();     //基于投票排序
    int vote();             //进行一次投票
    int infect();           //进行感染
    double infectSize();    //计算感染规模
    int printVex();         //打印节点信息
};

#endif // GRAPH_H
